#! /bin/sh
# PCP QA Test No. 638
# pmnsdel concurrency issues - pv #826904
#
# Copyright (c) 1995-2002 Silicon Graphics, Inc.  All Rights Reserved.
#

seq=`basename $0`
echo "QA output created by $seq"

# get standard filters
. ./common.product
. ./common.filter
. ./common.check

status=0	# success is the default!
$sudo rm -f $tmp.* $seq.full
trap "rm -f $tmp.*; exit \$status" 0 1 2 3 15

_del()
{
    while true
    do
	pmlock $tmp.root.lock && break
	sleep 1
    done
    pmnsdel -n $tmp.root $1
    rm -f $tmp.root.lock
}

cat <<End-of-File >$tmp.master
/*
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
*/
root {
    one
    two
    three
    keep1 	1:0:1
    d1		1:1:1
    keep2 	2:0:2
}
/*
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
*/

one {
    d2		2:1:2
    one
}
/*
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
*/

one.one {
    d3		3:1:3
    one
    d6		6:1:6
    d7		7:1:7
    d8		8:1:8
}
/*
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
*/

one.one.one {
    keep4	4:0:4
}
/*
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
*/

two {
    keep3 	3:0:3
    d4		4:1:4
    d9		9:1:9
}
/*
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
*/

three {
    one
}
/*
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
*/

three.one {
    d5		5:1:5
}
/*
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
*/
End-of-File


# real QA test starts here
echo "Initial state ..."
pminfo -m -n $tmp.master

echo
echo "Serial deletions ..."
cp $tmp.master $tmp.root
for m in d1 one.d2 one.one.d3 two.d4 three.one.d5 one.one.d6 \
	 one.one.d7 one.one.d8 two.d9
do
    pmnsdel -n $tmp.root $m 2>&1
done \
| grep ' leaf' \
| LC_COLLATE=POSIX sort -nr
echo
pminfo -m -n $tmp.root

echo
echo "Parallel deletions ..."
cp $tmp.master $tmp.root
rm -f $tmp.out
for m in d1 one.d2 one.one.d3 two.d4 three.one.d5 one.one.d6 \
	 one.one.d7 one.one.d8 two.d9
do
    _del $m >$tmp.out.$m 2>&1 &
done
wait

cat $tmp.out.* \
| grep ' leaf' \
| LC_COLLATE=POSIX sort -nr
echo

for f in $tmp.out.*
do
    echo >>$seq.full
    echo "=== $f ===" >>$seq.full
    cat $f >>$seq.full
done

pminfo -m -n $tmp.root

# success, all done
exit
